/* The Return Value of for_each() */
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

// function object to process the mean value
class MeanValue {
private:
	long num;
	long sum;
public:
	// constructor
	MeanValue() :num(0), sum(0) {
	}

	// 'function call'
	void operator() (int &elem) {
		++num;			// increment count
		sum += elem;	// add value
		++elem;
	}

	// return mean value
	double value(){
		return static_cast<double>(sum) / static_cast<double>(num);
	}
};

int main()
{
	vector<int> coll = { 1, 2, 3, 4, 5, 6, 7, 8 };

	// process and print mean value
	MeanValue mv = for_each(coll.begin(), coll.end(), MeanValue());
	cout << "mean value: " << mv.value() << endl;
	for (auto i : coll)
	{
		cout << i << " ";
	}
	cout << endl;

	return 0;
}